export { default as request } from './request';
import { getAppSign, getCompanySign, getJsapiSign } from '@/api/h5';
import wx from 'wx';

/**
 * 解析 URL 参数
 */
export function parseUrl() {
  try {
    var search = window.location.search.substring(1);
    var params = search.split('&');
    var param = {};
    for (var i = 0; i < params.length; i++) {
      var index = params[i].indexOf('=');
      var key = params[i].substring(0, index);
      var value = params[i].substring(index + 1);
      param[key] = value;
    }
    return param;
  } catch (e) {
    window.console.log(e.name + ' : ' + e.message);
  }
}

/**
 * 注入微信功能
 * @param {*} params
 * comSignObj -- 传给 wx.config 的签名信息: timestamp、nonceStr、signature
 * appSignObj -- 传给 wx.agentConfig 的签名信息: timestamp、nonceStr、signature
 * configApiList -- 传给 wx.config 的 jsApiList
 * agentApiList -- 传给 wx.agentConfig 的 jsApiList
 */
function configWx({ comSignObj, appSignObj, configApiList = [], agentApiList = [] }) {
  return new Promise((resolve, reject) => {
    const corpID = window.corpID;
    const agentId = window.agentId;
    const configApiSet = [...new Set([...configApiList, 'chooseImage', 'getLocalImgData'])];
    const agentApiSet = [...new Set([...agentApiList, 'selectExternalContact'])];
    const AppID = process.env.VUE_APP_AppID; // 付款端微信公众号AppID, 活动分享后页面
    // 付款端微信公众号打开时，使用第三方服务商的corpID
    const appId = window.isWX ? AppID : corpID;
    const configParams = {
      beta: true, // 必须这么写，否则wx.invoke调用形式的jsapi会有问题
      debug: process.env.VUE_APP_Debug === '1' && process.env.NODE_ENV === 'development', // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: appId, // 必填，企业微信的corpID
      timestamp: comSignObj.timestamp, // 必填，生成签名的时间戳
      nonceStr: comSignObj.nonceStr, // 必填，生成签名的随机串
      signature: comSignObj.signature, // 必填，签名，见 附录-JS-SDK使用权限签名算法
      jsApiList: [...configApiSet], // 必填，需要使用的JS接口列表，凡是要调用的接口都需要传进来
    };
    if (window.isWX) {
      delete configParams.beta;
    }
    console.log('wx.config configParams: ', configParams);
    wx.config(configParams);
    wx.ready(function () {
      console.log('wx.ready');
      if (corpID && agentId && agentApiList.length && /wxwork/i.test(window.navigator.userAgent)) {
        wx.agentConfig({
          corpid: corpID, // 必填，企业微信的corpid，必须与当前登录的企业一致
          agentid: agentId, // 必填，企业微信的应用id （e.g. 1000247）
          timestamp: appSignObj.timestamp, // 必填，生成签名的时间戳
          nonceStr: appSignObj.nonceStr, // 必填，生成签名的随机串
          signature: appSignObj.signature, // 必填，签名，见 附录-JS-SDK使用权限签名算法
          jsApiList: [...agentApiSet], //必填，传入需要使用的接口名称
          success: function (res) {
            // 回调
            console.log('wx.agentConfig success');
            console.log(res);
            resolve(true);
          },
          fail: function (res) {
            if (res.errMsg.indexOf('function not exist') > -1) {
              alert('版本过低请升级');
            }
            reject(res);
          },
        });
      } else {
        resolve(true);
      }
    });
    wx.error(function (res) {
      window.alert(JSON.stringify(res));
      // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
      reject(res);
    });
  });
}
/**
 * 获取当前 url 的签名信息: timestamp、nonceStr、signature，
 * 并注入微信 JS api
 * @param {*} params
 * configApiList -- 传给 wx.config 的 jsApiList
 * agentApiList -- 传给 wx.agentConfig 的 jsApiList
 */
export async function injectWx(configApiList = [], agentApiList = []) {
  // const corpID = window.sessionStorage.getItem('corpID');
  // const agentId = window.sessionStorage.getItem('agentId');
  const corpID = window.corpID;
  const agentId = window.agentId;
  const getSignatureFn = window.isWX && (window.isDeploy || window.isActivity) ? getJsapiSign : getCompanySign;
  const params = {
    comSignObj: {},
    appSignObj: {},
    configApiList,
    agentApiList,
  };
  if (/wxwork|MicroMessenger/i.test(window.navigator.userAgent)) {
    // const url = window.isDeploy ? window.encodeURIComponent(window.location.href) : window.location.href;
    const url = location.href.split('#')[0];
    console.log('getSignatureFn url', url);
    const res1 = await getSignatureFn(url);
    params.comSignObj = res1.data;
    if (corpID && agentId && !window.isWX) {
      // 在微信客户端中不需要调用这个接口
      const res2 = await getAppSign(url);
      params.appSignObj = res2.data;
    }
    await configWx(params);
    return true;
  } else {
    throw new Error('请在微信或企业微信中打开应用');
  }
}
